/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __4A762ACF_2300_45E3_80A8_F282E2FF8340__
#define __4A762ACF_2300_45E3_80A8_F282E2FF8340__

#include <string>
#include <vector>

namespace xos
{

    template< class OBJECT >
    class known_object : public OBJECT
    {
    public:
        typedef OBJECT BASE;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //
    public:
        known_object( i_unknown * pOutterUnknown = 0 ) : BASE( pOutterUnknown ),
            __xos_n_class_priority( 0 )
        {
        }
        ~known_object()
        {
        }
    public:
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //
        int set_module_name( const char * lpszName )
        {
            __xos_module_name = lpszName;
            return 0;
        }
        const char * get_module_name()
        {
            if( __xos_module_name.empty() )
            {
                __xos_module_name = BASE::_xos_module_name();
            }
            return __xos_module_name.c_str();
        }
        int set_module_id( const char * lpszId )
        {
            __xos_module_id = lpszId;
            return 0;
        }
        const char * get_module_id()
        {
            if( __xos_module_id.empty() )
            {
                __xos_module_id = BASE::_xos_module_id();
            }
            return __xos_module_id.c_str();
        }
        int set_class_name( const char * lpszName )
        {
            __xos_class_name = lpszName;
            return 0;
        }
        const char * get_class_name()
        {
            if( __xos_class_name.empty() )
            {
                __xos_class_name = BASE::_xos_class_name();
            }
            return __xos_class_name.c_str();
        }
        int set_class_id( const char * lpszId )
        {
            __xos_class_id = lpszId;
            return 0;
        }
        const char * get_class_id()
        {
            if( __xos_class_id.empty() )
            {
                __xos_class_id = BASE::_xos_class_id();
            }
            return __xos_class_id.c_str();
        }
        int get_priority( int * pnPriority )
        {
            return __xos_n_class_priority;
        }
        int set_priority( int nPriority )
        {
            __xos_n_class_priority = nPriority;
            return nPriority;
        }
    public:
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //
        int init()
        {
            int ret = 0;
            if( 0 == ret )
            {
                ret = BASE::init();
            }
            return ret;
        }
        int term()
        {
            int ret = 0;
            __xos_n_class_priority = 0;
            __xos_module_name = "";
            __xos_module_id = "";
            __xos_class_name = "";
            __xos_class_id = "";
            BASE::term();
            return ret;
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //
    private:
        std::string __xos_module_name;
        std::string __xos_module_id;
        std::string __xos_class_name;
        std::string __xos_class_id;
        int __xos_n_class_priority;
    };

}

#endif // __4A762ACF_2300_45E3_80A8_F282E2FF8340__
